// 引入 axios 库
const axios = require('axios');

// 使用 axios.create 创建一个自定义的 Axios 实例
// 该实例具有独立的配置，可用于特定的请求场景
const apiClient = axios.create({
    // 所有请求的基础 URL，后续请求的相对路径会拼接在这个基础 URL 后面
    baseURL: 'https://jsonplaceholder.typicode.com',
    // 请求超时时间，单位为毫秒，这里设置为 5000 毫秒（即 5 秒）
    // 如果请求在 5 秒内未完成，将触发超时错误
    timeout: 5000,
    // 自定义请求头，设置请求的内容类型为 JSON
    headers: {
        'Content-Type': 'application/json'
    },
    // 跨域请求时是否携带凭证（如 cookie、HTTP 认证等）
    // 设置为 true 表示携带凭证
    withCredentials: false,
    // 自定义 HTTP 状态码的验证函数
    // 这里定义状态码在 200 到 299 之间被视为请求成功
    validateStatus: function (status) {
        return status >= 200 && status < 300;
    },
    // 在向服务器发送请求之前对请求数据进行转换
    // 这里将请求数据转换为 JSON 字符串
    transformRequest: [function (data, headers) {
        return JSON.stringify(data);
    }],
    // 在响应数据传递给 then 或 catch 之前对其进行转换
    // 这里将响应数据解析为 JSON 对象
    transformResponse: [function (data) {
        return JSON.parse(data);
    }]
});

// 使用创建好的实例发送 GET 请求，获取用户列表
apiClient.get('/users')
    .then(response => {
        // 请求成功时，打印响应数据
        console.log('用户列表数据:', response.data);
    })
    .catch(error => {
        // 请求失败时，打印错误信息
        console.error('请求用户列表时出错:', error);
    });

// 使用创建好的实例发送 POST 请求，创建一个新的帖子
const newPost = {
    title: '新帖子标题',
    body: '新帖子内容',
    userId: 1
};
apiClient.post('/posts', newPost)
    .then(response => {
        // 请求成功时，打印新创建的帖子数据
        console.log('新创建的帖子数据:', response.data);
    })
    .catch(error => {
        // 请求失败时，打印错误信息
        console.error('创建帖子时出错:', error);
    });
